define(["jquery", "easy-admin"], function ($, ea) {

    var init = {
        table_elem: '#currentTable',
        table_render_id: 'currentTableRenderId',
        index_url: 'benefit.calculate/index',
        add_url: 'benefit.calculate/add',
        edit_url: 'benefit.calculate/edit',
        delete_url: 'benefit.calculate/delete',
        export_url: 'benefit.calculate/export',
        modify_url: 'benefit.calculate/modify',
        recycle_url: 'benefit.calculate/recycle',
        calculate_url: 'benefit.calculate/calculate',
        upload_url: 'benefit.calculate/upload'
    };
    const start_day = $("#start").val();//开始日子
    const day_interval = $("#interval").val();//时长
    const month_type = $("#type").val();//月份类型
    $("#calculate_range_label").on('click', function () {
        const month_type_str = month_type == 0 ? '上月' : '本月'
        layer.msg(`提取规则：${month_type_str}${start_day}号后${day_interval}个月`, { icon: 1 });
    })
    layui.use(['util'], function () {
        var upload = layui.upload;
        var $ = layui.$;
        var laydate = layui.laydate;
        $(function () {
            if ($("#calculate-range").length > 0) {
                defaultRange();//设置默认日期
            }
        });
        upload.render({
            elem: '#upload-excel',
            url: 'upload',
            auto: false,
            accept: 'file',
            bindAction: '#upload-action',
            data: {
                start: function () {
                    return $("#calculate-range-start-date").val();
                },
                end: function () {
                    return $("#calculate-range-end-date").val();
                }
            },
            before: function () {
                loadingIndex = layer.msg('上传中', {
                    icon: 16,
                    shade: 0.01
                });
            },
            done: function (res) {
                if (res.code == 0) {
                    layer.msg(res.msg, { icon: 2 })
                } else {
                    var index = parent.layer.getFrameIndex(window.name);
                    parent.layer.close(index);
                    parent.layer.msg(res.msg, { icon: 1 })
                }
            }
        });
        // 日期范围 - 左右面板联动选择模式
        laydate.render({
            elem: '#calculate-range',
            range: ['#calculate-range-start-date', '#calculate-range-end-date'],
            rangeLinked: true, // 开启日期范围选择时的区间联动标注模式 ---  2.8+ 新增
            done: function (value, startDate, endDate) {

            }
        });

        ///默认范围
        function defaultRange() {
            const safeDate = new Date();
            const safeDate_str = `${safeDate.getFullYear()}-${safeDate.getMonth() + 1}-${safeDate.getDate()}`
            console.log(`修正日期：${safeDate_str}`)
            var start_complete_date_str;
            var end_complete_date_str;
            var start_complete_date = safeDate;
            var end_complete_date;
            var value;
            if (month_type == 0) {
                console.log(`上月${start_day}号之后${day_interval}个月`)
                const last_date = getLastMonth(safeDate, true);//推算出上个月
                const day = start_day < last_date.day ? start_day : last_date.day;//确定几号，2月只有28天，防止出现溢出情况
                start_complete_date_str = `${last_date.year}-${last_date.month}-${day}`//拼接最终的开始日期
                start_complete_date = safeDateFromString(start_complete_date_str);//转化成Date类型
                //end_complete_date = addDays(start_complete_date, parseInt(day_interval));//计算结束日期
                end_complete_date = addOneMonth(start_complete_date);
            } else {
                console.log(`本月${start_day}号之后${day_interval}个月`)
                //end_complete_date = addDays(safeDate, parseInt(day_interval));
                end_complete_date = addOneMonth(safeDate);
            }
            start_complete_date_str = `${start_complete_date.getFullYear()}-${start_complete_date.getMonth() + 1}-${start_complete_date.getDate()}`
            end_complete_date_str = `${end_complete_date.getFullYear()}-${end_complete_date.getMonth() + 1}-${end_complete_date.getDate()}`
            value = `${start_complete_date_str}/${end_complete_date_str}`
            console.log(`统计范围：${value}`)
            $("#calculate-range-start-date").val(start_complete_date_str);
            $("#calculate-range-end-date").val(end_complete_date_str);
        }

        // // 日期年月范围
        // laydate.render({
        //     elem: "#calculate_month",
        //     type: "month",
        //     range: false,
        //     done: function (value, date, endDate) {
        //         const complete_date = `${date.year}-${date.month}-${start_day}`
        //         console.log(`拼接日期：${complete_date}`);
        //         const safeDate = safeDateFromString(complete_date);
        //         const safeDate_str = `${safeDate.getFullYear()}-${safeDate.getMonth() + 1}-${safeDate.getDate()}`
        //         console.log(`修正日期：${safeDate_str}`)
        //         var start_complete_date_str;
        //         var end_complete_date_str;
        //         var start_complete_date = safeDate;
        //         var end_complete_date;
        //         var value;
        //         if (month_type == 0) {
        //             console.log(`上月${start_day}号之后${day_interval}个月`)
        //             const last_date = getLastMonth(safeDate, true);//推算出上个月
        //             const day = start_day < last_date.day ? start_day : last_date.day;//确定几号，2月只有28天，防止出现溢出情况
        //             start_complete_date_str = `${last_date.year}-${last_date.month}-${day}`//拼接最终的开始日期
        //             start_complete_date = safeDateFromString(start_complete_date_str);//转化成Date类型
        //             //end_complete_date = addDays(start_complete_date, parseInt(day_interval));//计算结束日期
        //             end_complete_date = addOneMonth(start_complete_date);
        //         } else {
        //             console.log(`本月${start_day}号之后${day_interval}个月`)
        //             //end_complete_date = addDays(safeDate, parseInt(day_interval));
        //             end_complete_date = addOneMonth(safeDate);
        //         }
        //         start_complete_date_str = `${start_complete_date.getFullYear()}-${start_complete_date.getMonth() + 1}-${start_complete_date.getDate()}`
        //         end_complete_date_str = `${end_complete_date.getFullYear()}-${end_complete_date.getMonth() + 1}-${end_complete_date.getDate()}`
        //         value = `${start_complete_date_str}/${end_complete_date_str}`
        //         console.log(`统计范围：${value}`)
        //         // 统计范围
        //         $("#calculate_range").val(value);
        //     },
        //     shortcuts: [
        //         {
        //             text: "上个月",
        //             value: function () {
        //                 var date = new Date();
        //                 var year = date.getFullYear();
        //                 var month = date.getMonth();
        //                 return new Date(year, month - 1, 1);
        //             }
        //         },
        //         {
        //             text: "这个月",
        //             value: function () {
        //                 var date = new Date();
        //                 var year = date.getFullYear();
        //                 var month = date.getMonth();
        //                 return new Date(year, month, 1);
        //             }
        //         },
        //         {
        //             text: "下个月",
        //             value: function () {
        //                 var date = new Date();
        //                 var year = date.getFullYear();
        //                 var month = date.getMonth();
        //                 return new Date(year, month + 1, 1);
        //             }
        //         }
        //     ]
        // });

        /**
        * 将日期字符串转为Date对象，若日期溢出则自动修正为当月最后一天
        * @param {string} dateStr 日期字符串，支持YYYY-MM-DD、YYYY/MM/DD等格式
        * @returns {Date} 修正后的Date对象
        */
        function safeDateFromString(dateStr) {
            // 提取年月日（支持多种分隔符）
            const match = dateStr.match(/^(\d{4})[-/](\d{1,2})[-/](\d{1,2})$/);
            if (!match) {
                throw new Error('无效的日期格式，请使用YYYY-MM-DD或YYYY/MM/DD');
            }

            const year = parseInt(match[1], 10);
            let month = parseInt(match[2], 10) - 1; // 转为0基索引（1月→0）
            const day = parseInt(match[3], 10);

            // 尝试创建原始日期
            const originalDate = new Date(year, month, day);

            // 检查日期是否溢出（月份或年份发生了自动变更）
            if (
                originalDate.getFullYear() !== year ||
                originalDate.getMonth() !== month
            ) {
                // 日期溢出，获取当月最后一天
                const lastDayOfMonth = new Date(year, month + 1, 0).getDate();
                return new Date(year, month, lastDayOfMonth);
            }

            // 日期有效，直接返回
            return originalDate;
        }

        /**
         * 计算一个日期的上个月
         * @param {Date|string} date - 目标日期（可传Date对象或ISO字符串，如"2024-03-31"）
         * @param {boolean} returnLastDay - 是否返回上个月最后一天（默认false：返回相同日期）
         * @returns {string} 格式化后的日期（YYYY-MM-DD）
         */
        function getLastMonth(date, returnLastDay = false) {
            // 统一转为Date对象（处理字符串输入）
            const targetDate = typeof date === 'string' ? new Date(date) : new Date(date);
            if (isNaN(targetDate.getTime())) {
                throw new Error('无效的日期格式，请传入Date对象或ISO字符串（如"2024-03-31"）');
            }

            let lastMonthDate;
            if (returnLastDay) {
                // 情况1：返回上个月最后一天
                lastMonthDate = new Date(targetDate.getFullYear(), targetDate.getMonth(), 0);
            } else {
                // 情况2：返回上个月相同日期（自动处理溢出）
                const str = `${targetDate.getFullYear()}-${targetDate.getMonth()}-${targetDate.getDate()}`;
                lastMonthDate = safeDateFromString(str);

            }

            // 格式化为YYYY-MM-DD（处理个位数补0）
            const year = lastMonthDate.getFullYear();
            const month = lastMonthDate.getMonth() + 1;
            const day = lastMonthDate.getDate();
            //const day = String(lastMonthDate.getDate()).padStart(2, '0');
            return {
                'year': year,
                'month': month,
                'day': day,
            };
        }

        /**
        * 给日期添加指定天数
        * @param {Date} date 原始日期
        * @param {number} days 要添加的天数（可正可负，负数表示减天数）
        * @returns {Date} 新的日期对象
        */
        function addDays(date, days) {
            const newDate = new Date(date);
            // 利用setDate自动处理月份/年份变更
            newDate.setDate(newDate.getDate() + days);
            // 格式化为YYYY-MM-DD（处理个位数补0）
            const year = newDate.getFullYear();
            const month = newDate.getMonth();
            const day = newDate.getDate();
            return new Date(year, month, day);
        }

        ///加1个月
        function addOneMonth(date) {
            // 创建日期副本，避免修改原日期
            const newDate = new Date(date);
            const currentMonth = newDate.getMonth();

            // 设置为下个月的同一天
            newDate.setMonth(currentMonth + 1);

            // 如果月份没有正确增加（比如1月31日加一个月后变成3月1日）
            if (newDate.getMonth() !== (currentMonth + 1) % 12) {
                // 回退到当月最后一天
                newDate.setDate(0);
            }
            return newDate;
        }
    });

    return {

        index: function () {
            ea.table.render({
                init: init,
                toolbar: [//
                    [{
                        text: '上传Excel',
                        url: init.upload_url,
                        method: 'open',
                        auth: 'upload',
                        class: 'layui-btn layui-btn-sm layui-btn-success ',
                        icon: 'fa fa-cloud-upload',
                        extend: 'data-width="50%" data-height="42%"'
                    }, {
                        text: '计算收益',
                        url: init.calculate_url,
                        method: 'open',
                        auth: 'calculate',
                        class: 'layui-btn layui-btn-sm layui-btn-success ',
                        icon: 'fa fa-calculator',
                        extend: 'data-width="90%" data-height="80%"'
                    }], 'refresh', 'delete', 'export'
                ],
                cols: [[
                    { type: 'checkbox' },
                    { field: 'id', title: 'id', width: 80, search: false },
                    { field: 'well_number', title: '井号' },
                    { field: 'measure_type', title: '措施类型', search: false },
                    { field: 'well_start_time', title: '开井时间', search: false },
                    { field: 'previous_capacity', title: '措施前产能', search: false },
                    { field: 'future‌_capacity', title: '措施后产能', search: false },
                    { field: 'material_cost', title: '材料费', search: false },
                    { field: 'labor_cost', title: '劳务费', search: false },
                    { field: 'benefit', title: '效益', search: false },
                    { field: 'result', title: '评价结果', search: false },
                    { width: 250, title: '操作', templet: ea.table.tool },

                ]],
            });

            ea.listen();
        },
        add: function () {
            ea.listen();
        },
        edit: function () {
            ea.listen();
        },
        upload: function () {
            ea.listen();
        },
        calculate: function () {
            ea.listen();
        },
    };
});